import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
// import { LoggerMiddleware } from './common/middleware/logger.middleware';
// import { CustomHttpException } from './common/filters/customHttpException.filter';
// import { ValidationPipe } from './common/pipes/validation.pipe';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 全局使用中间件
  // app.use(LoggerMiddleware);

  // 全局过滤器
  // app.useGlobalFilters(new CustomHttpException());

  // 全局管道
  // app.useGlobalPipes(new ValidationPipe());

  /* 
  设置swagger文档相关配置
  DocumentBuilder是一个辅助类，
  有助于结构的基本文件SwaggerModule。
  它包含几种方法，可用于设置诸如标题，描述，版本等属性。
  */
  const swaggerOptions = new DocumentBuilder()
    .setTitle('nest入门接口标题')
    .setDescription('使用nest书写的常用性接口') // 文档介绍
    .setVersion('1.0.0') // 文档版本
    // .addTag('用户,安全') // 每个tag标签都可以对应着几个@ApiUseTags('用户,安全') 然后被ApiUseTags注释，字符串一致的都会变成同一个标签下的
    // .setBasePath('http://localhost:5000')
    .build();
  /* 
  为了创建完整的文档（具有定义的HTTP路由），我们使用类的createDocument()方法SwaggerModule。
  此方法带有两个参数，分别是应用程序实例和基本Swagger选项。
  */
  const swaggerDocument = SwaggerModule.createDocument(app, swaggerOptions);
  /* 
  最后一步是setup()。
  它依次接受（1）装入Swagger的路径，（2）应用程序实例, （3）描述Nest应用程序的文档。
  */
  SwaggerModule.setup('/doc', app, swaggerDocument);

  await app.listen(3000);
}
bootstrap();
